wayland: Ensure we get the master pointer on GdkDeviceManager::get_client_pointer
authorCarlos Garnacho <carlosg@gnome.org>
Thu, 19 Nov 2015 19:04:46 +0000 (20:04 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Thu, 19 Nov 2015 22:26:48 +0000 (23:26 +0100)
Now that we have multiple master pointers, this call may pick the wrong one.
Instead, pick the GdkWaylandDeviceData from the first device, and pick the
master pointer from there.

gdk/wayland/gdkdevice-wayland.c

index 60e209d7f783b9b6864609b7462b9e70f9e65844..eefd38cbc99e5fc06aad1dcd68d2ffc861b92add 100644 (file)
@@ -2412,21 +2412,16 @@ static GdkDevice *
 gdk_wayland_device_manager_get_client_pointer (GdkDeviceManager *device_manager)
 {
   GdkWaylandDeviceManager *wayland_device_manager;
-  GList *l;
+  GdkWaylandDeviceData *wd;
+  GdkDevice *device;
 
   wayland_device_manager = GDK_WAYLAND_DEVICE_MANAGER (device_manager);
 
-  /* Find the first master pointer device */
-  for (l = wayland_device_manager->devices; l != NULL; l = l->next)
-    {
-      GdkDevice *device = l->data;
-
-      if (gdk_device_get_source (device) == GDK_SOURCE_MOUSE &&
-          gdk_device_get_device_type (device) == GDK_DEVICE_TYPE_MASTER)
-        return device;
-    }
+  /* Find the master pointer of the first GdkWaylandDeviceData we find */
+  device = wayland_device_manager->devices->data;
+  wd = GDK_WAYLAND_DEVICE (device)->device;
 
-  return NULL;
+  return wd->master_pointer;
 }
 
 static void